#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TAILLLE_MAX 20

void affichageArgument(int argc, char *argv[], int debut, char * ptr);
void affichageEnvironnement(char ** arge, char * ptr);
void affichageAide();
int test(int argc, char *argv[], char ** arge);

int main(int argc, char *argv[], char ** arge) {
    int argc2;
    char argv2[][TAILLLE_MAX]= {{"programme"},{"/a"}};

    argc2=2;
    test(argc2,argv2,arge);

    return 0;
}

int test(int argc, char *argv[], char ** arge) {
    char argument[] = {"/a"};
    char environnement[] = {"/e"};
    char aide[] = {"/?"};
    char  * ptr_char;
    int j;
    int compteur=0;
    int debut=0;
    char retour[4000];
    char * ptr_retour;
    int affichAid=0;

    ptr_retour=retour;

    if(argc>1) {
        for(j=1; j<argc; j++) {
            ptr_char = argv[j];
            if(!strcmp(ptr_char,argument)) {
                j+=1;
                ptr_char = argv[j];
                debut=j;
                while( strcmp(ptr_char,argument) && strcmp(ptr_char,environnement) && strcmp(ptr_char,environnement) ) {
                    compteur++;
                    j++;
                }
                affichageArgument(debut+compteur,argv,debut,retour);
            } else if(!strcmp(ptr_char,environnement)) {
                affichageEnvironnement(arge,retour);
            } else if(!strcmp(ptr_char,aide)) {
                affichageAide();
                affichAid=1;
            }

        }
    }else{
    printf("error");
    }

    if(affichAid) {
        ptr_retour=NULL;
    }

    printf("%s",ptr_retour);

    return 0;
}

void affichageArgument(int fin, char *argv[], int debut, char * ptr) {
    int j;
    char ligne[]= {"------------------------------"};
    char entete[]= {"Argument : \n"};
    char retourligne[]= {"\n"};

    if((fin-debut)>0) {
        strcat(ptr,ligne);
        strcat(ptr,entete);
        for(j=debut; j<fin; j++) {
            strcat(ptr,(argv[j]));
            strcat(ptr,retourligne);
        }
        strcat(ptr,retourligne);
    }
}

void affichageEnvironnement(char ** arge, char * ptr) {
    int i=0;
    char ligne[]= {"------------------------------"};
    char entete[]= {"Variables d'environnement : \n"};
    char retourligne[]= {"\n"};

    strcat(ptr,ligne);
    strcat(ptr,entete);
    while((*(arge+i*sizeof(char *)))!=NULL) {
        strcat(ptr,*(arge+i*sizeof(char *)));
        i++;
        strcat(ptr,retourligne);
    }
}

void affichageAide() {
    printf("------------------------------ \n");
    printf("Argrec : recupere et visualise les arguments et/ou les variables d'environnement\n");
    printf("Usage : argopt [/option] [arg ...]\n");
    printf("option :\n");
    printf("\t\t /a\t affichage des arguments \n");
    printf("\t\t /e\t affichage de l'environnement\n");
    printf("\t\t /?\t affichage de l'aide\n");
}
